package com.ocn.li.scmdy.modules.app.entity;

import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.opensymphony.xwork2.ActionContext;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang.StringUtils;
import org.hibernate.annotations.GenericGenerator;
import org.springframework.format.annotation.DateTimeFormat;

import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
import java.io.Serializable;
import java.util.Date;


/**
 * @类： <code>Base.java</code>
 * @描述： 实体类的基类，抽取公共属性。
 * @版权所有：
 * @author： songwx
 * @version： V1, 2014-4-20 下午08:40:07
 */
@MappedSuperclass
public class Base implements Serializable, Cloneable {
	private static final long serialVersionUID = 1L;
	@Override
	public Base clone() throws CloneNotSupportedException
	{      
		return (Base)super.clone();
	}

	@ApiModelProperty(value = "主键")
	private String id_;

	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
	@ApiModelProperty(value = "创建时间")
	private Date createTime;

	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
	@ApiModelProperty(value = "修改时间")
	private Date updateTime;

	@ApiModelProperty(value = "增加人员id")
	private String createUserId;

	@ApiModelProperty(value = "修改人员id")
	private String updateUserId;

	@ApiModelProperty(value = "逻辑删除的标志：0.正常；1.逻辑删除")
	private Integer delFlag;

	@TableField(exist = false)
	@ApiModelProperty(value = "系统编码：0.正常；1.逻辑删除")
	private String code;

	@TableField(exist = false)
	@ApiModelProperty(value = "备注")
	private String remark;

	@ApiModelProperty(value = "排序号")
	private Integer orderNumber;

	@ApiModelProperty(value = "保存对应数据区域编码")
	private String dataAreaCode;
	

	public Base() {
		
	}

	public Base(String id_) {
		super();
		this.id_ = id_;
	}

	/**
	* @方法：getId
	* @描述：主键ID
	* @return
	* @author： songwx
	* @version： V1, 2014-4-20 下午09:39:25
	*/
	@Id
    @GeneratedValue(generator = "paymentableGenerator")
    @GenericGenerator(name = "paymentableGenerator", strategy = "uuid")
	@Column(name = "ID_", nullable = false,length = 36)
	@FieldInfo(comment = "主键ID",columnType="7")
	public String getId() {
		return id_;
	}
	/**
	* @方法：setId
	* @描述：主键ID
	* @param id_
	* @author： songwx
	* @version： V1, 2014-4-20 下午09:39:37
	*/
	public void setId(String id_) {
		this.id_ = id_;
	}
	/**
	* @方法：getCreateTime
	* @描述：创建时间
	* @return  
	* @author： songwx
	* @version： V1, 2014-4-20 下午09:39:44
	*/
	@Column(name="CREATE_TIME")
	@FieldInfo(comment = "创建时间",columnType="7")
	public Date getCreateTime() {
		return createTime==null?new Date():createTime;
	}
	/**
	* @方法：setCreateTime
	* @描述：创建时间
	* @param createTime  
	* @author： songwx
	* @version： V1, 2014-4-20 下午09:39:52
	*/
	public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}
	/**
	* @方法：getUpdateTime
	* @描述：最近的修改时间
	* @return  
	* @author： songwx
	* @version： V1, 2014-4-20 下午09:39:56
	*/
	@Column(name="UPDATE_TIME")
	@FieldInfo(comment = "更新时间",columnType="7")
	public Date getUpdateTime() {
		return updateTime==null?new Date():updateTime;
	}
	/**
	* @方法：setUpdateTime
	* @描述：最近的修改时间
	* @param updateTime  
	* @author： songwx
	* @version： V1, 2014-4-20 下午09:40:08
	*/
	public void setUpdateTime(Date updateTime) {
		this.updateTime = updateTime;
	}
	/**
	* @方法：getCreateUserId
	* @描述：创建人ID
	* @return  
	* @author： songwx
	* @version： V1, 2014-4-20 下午09:40:13
	*/
	@Column(name="CREATE_USER_ID",length = 36)
	@FieldInfo(comment = "创建人ID",columnType="7")
	public String getCreateUserId() {
		ActionContext context = ActionContext.getContext();
		Accounts acc = null;
		String userId =null;
		if(context!=null){
			acc =(Accounts) context.getSession().get("login_user");
			if(acc !=null){
				userId=acc.getId();
			}
		}
		if(StringUtils.isNotBlank(createUserId)){
			return createUserId;
		}else{
			return userId;
		}
	}
	/**
	* @方法：setCreateUserId
	* @描述：创建人ID
	* @param createUserId  
	* @author： songwx
	* @version： V1, 2014-4-20 下午09:40:36
	*/
	public void setCreateUserId(String createUserId) {
		this.createUserId = createUserId;
	}
	/**
	* @方法：getUpdateUserId
	* @描述：修改人ID
	* @return  
	* @author： songwx
	* @version： V1, 2014-4-20 下午09:41:09
	*/
	@Column(name="UPDATE_USER_ID",length = 36)
	@FieldInfo(comment = "修改人ID",columnType="7")
	public String getUpdateUserId() {
		ActionContext context = ActionContext.getContext();
		Accounts acc = null;
		String userId =null;
		if(context!=null){
			acc =(Accounts) context.getSession().get("login_user");
			if(acc !=null){
				userId=acc.getId();
			}
		}
		if(StringUtils.isNotBlank(updateUserId)){
			return updateUserId;
		}else{
			return userId;
		}
	}
	/**
	* @方法：setUpdateUserId
	* @描述：修改人ID
	* @param updateUserId  
	* @author： songwx
	* @version： V1, 2014-4-20 下午09:41:14
	*/
	public void setUpdateUserId(String updateUserId) {
		this.updateUserId = updateUserId;
	}

	/**
	* @方法：getDelFlag
	* @描述：逻辑删除标志：0.正常；1.逻辑删除；
	* @return  
	* @author： songwx
	* @version： V1, 2014-4-20 下午09:41:20
	*/
	@Column(name="DEL_FLAG",nullable=true)
	@FieldInfo(comment = "删除标志：0.正常；1.逻辑删除；",columnType="7")
	public Integer getDelFlag() {
		return delFlag==null?0:delFlag;
//		return delFlag;
	}

	/**
	* @方法：setDelFlag
	* @描述：逻辑删除标志 1表示删除，0表示正常
	* @param delFlag  
	* @author： songwx
	* @version： V1, 2014-4-20 下午09:41:26
	*/
	public void setDelFlag(Integer delFlag) {
		this.delFlag = delFlag;
	}
	/**
	 * 
	 * @方法：getRemark
	 * @描述：获取备注
	 * @param: Base
	 * @return
	 * @author: tangxuefeng
	 * @date :2014-8-28下午4:07:17
	 * @version: V1.0
	 */
	@Column(name="REMARK_",length = 4000)
	@FieldInfo(comment = "备注",columnType="7")
	public String getRemark() {
		return remark;
	}
	/**
	 * 
	 * @方法：setRemark
	 * @描述：设置备注
	 * @param: Base
	 * @param remark
	 * @author: tangxuefeng
	 * @date :2014-8-28下午4:08:01
	 * @version: V1.0
	 */
	public void setRemark(String remark) {
		this.remark = remark;
	}
	/**
	 * @方法：getCode
	 * @描述： 获取系统编码
	 * @return
	 * @author： songwuxing
	 * @date : 2014-8-25 上午11:29:26
	 * @version：   V1.0
	 */
	@Column(name="code_",length = 100)
	@FieldInfo(comment = "系统编码",columnType="7")
	public String getCode() {
		return code;
	}

	/**
	 * @方法：setCode
	 * @描述：设置系统编码
	 * @param code
	 * @author： songwuxing
	 * @date : 2014-8-25 上午11:29:33
	 * @version：   V1.0
	 */
	public void setCode(String code) {
		this.code = code;
	}

	/**
	 * @方法：getOrderNumber
	 * @描述： 获取排序号
	 * @return
	 * @author： songwuxing
	 * @date : 2014-8-25 上午11:29:26
	 * @version：   V1.0
	 */
	@Column(name="order_number")
	@FieldInfo(comment = "排序号",columnType="7")
	public Integer getOrderNumber() {
		return orderNumber;
	}

	public void setOrderNumber(Integer orderNumber) {
		this.orderNumber = orderNumber;
	}

	/**
	 * @方法：getAreaCode
	 * @描述：获取该数据对应的所属行政区划编码
	 * @return
	 * @author： songwuxing
	 * @date : 2014-11-26 2014-11-26
	 * @version：   V1.0
	 */
	@Column(name="data_area_code",length = 50)
	@FieldInfo(comment = "数据对应区域编码",columnType="7")
	public String getDataAreaCode() {
		
		
		ActionContext context = ActionContext.getContext();
		AccountRelationAttribute acc = null;
		String codeArae =null;
		if(context!=null){
			acc =(AccountRelationAttribute) context.getSession().get("account_relation");
			if(acc !=null){
				codeArae=acc.getAdministrativeDivisionCode();
				//codeArae=acc.getDataAreaCode();
			}
		}
		if(StringUtils.isNotBlank(dataAreaCode)){
			return dataAreaCode;
		}else{
			return codeArae;
		}
	}

	/**
	 * @方法：setAreaCode
	 * @描述：设置该数据对应的所属行政区划编码
	 * @param dataAreaCode
	 * @author： songwuxing
	 * @date : 2014-11-26 2014-11-26
	 * @version：   V1.0
	 */
	public void setDataAreaCode(String dataAreaCode) {
		this.dataAreaCode = dataAreaCode;
	}
	
	
}
